---
title: ^0.14.0 to ^1.0.0
---

দীর্ঘ প্রতীক্ষার পর অবশেষে রিভারপডের প্রথম স্থিতিশীল সংস্করণ প্রকাশিত হয়েছে 👏

পরিবর্তনের সম্পূর্ণ তালিকা দেখতে, [এখানে](https://pub.dev/packages/flutter_riverpod/changelog#100) দেখুন।

এই পৃষ্ঠায়, আমরা কীভাবে একটি বিদ্যমান রিভারপড অ্যাপ্লিকেশনকে 0.14.x সংস্করণ থেকে 1.0.0 সংস্করণে স্থানান্তর করতে হয় তার উপর ফোকাস করব।

## স্বয়ংক্রিয়ভাবে নতুন সিনট্যাক্সে আপনার প্রকল্প আপগ্রেড করতে মাইগ্রেশন টুল ব্যবহার করে

বিভিন্ন পরিবর্তনগুলি ব্যাখ্যা করার আগে, এটি লক্ষ করা উচিত যে রিভারপড একটি কমান্ড-লাইন টুল নিয়ে আসে যা আপনার জন্য আপনার প্রজেক্টকে স্বয়ংক্রিয়ভাবে স্থানান্তর করতে পারে।

### কমান্ড লাইন টুল ইনস্টল করা

মাইগ্রেশন টুল ইনস্টল করতে, নিচের কমান্ডটা রান করেনঃ

```sh
dart pub global activate riverpod_cli
```

আপনি এখন নিচের কমান্ড চালাতে পারবেনঃ

```sh
riverpod --help
```

### ব্যবহার

এখন কমান্ড লাইন ইনস্টল করা হয়েছে, আমরা এটি ব্যবহার শুরু করতে পারি।

- প্রথমে, আপনি আপনার টার্মিনালে যে প্রজেক্টটি স্থানান্তর করতে চান সেটি খুলুন।
- রিভারপড আপগ্রেড **করবেন না।**  
  মাইগ্রেশন টুলটি আপনার জন্য রিভারপডের সংস্করণ আপগ্রেড করবে।

  :::danger
   রিভারপড আপগ্রেড না করা গুরুত্বপূর্ণ।
   আপনি যদি ইতিমধ্যে সংস্করণ 1.0.0 ইনস্টল করে থাকেন তবে টুলটি সঠিকভাবে কার্যকর হবে না।
   তাই, টুল শুরু করার আগে আপনি সঠিকভাবে একটি পুরানো সংস্করণ ব্যবহার করছেন তা নিশ্চিত করুন।
  :::

- নিশ্চিত করুন যে আপনার প্রজেক্টটে ত্রুটি নেই।
- এক্সিকিঊটঃ
  ```sh
  riverpod migrate
  ```

টুলটি তারপর আপনার প্রজেক্টটি বিশ্লেষণ করবে এবং পরিবর্তনের পরামর্শ দেবে। উদাহরণস্বরূপ আপনি দেখতে পারেনঃ

```diff
-Widget build(BuildContext context, ScopedReader watch) {
+Widget build(BuildContext context, Widget ref) {
-  MyModel state = watch(provider);
+  MyModel state = ref.watch(provider);
}

Accept change (y = yes, n = no [default], A = yes to all, q = quit)?
```

পরিবর্তনটি গ্রহণ করতে, শুধু <kbd>y</kbd> টিপুন। অন্যথায় এটি প্রত্যাখ্যান করতে, <kbd>n</kbd> টিপুন।

## পরিবর্তনগুলি

এখন যেহেতু আমরা দেখেছি কিভাবে আপনার প্রোজেক্ট স্বয়ংক্রিয়ভাবে আপগ্রেড করতে CLI ব্যবহার করতে হয়, আসুন প্রয়োজনীয় পরিবর্তনগুলি বিস্তারিতভাবে দেখি।

### Syntax unification

রিভারপডের সংস্করণ 1.0.0 প্রভাইডারদের সাথে ইন্টারঅ্যাক্ট করার জন্য সিনট্যাক্সের একীকরণের উপর দৃষ্টি নিবদ্ধ করে। এর আগে, রিভারপডের অনেকগুলি একই রকম কিন্তু ভিন্ন সিনট্যাক্স ছিল একটি প্রভাইডার পড়ার জন্য, যেমন `ref.watch(provider)` বনাম `useProvider(provider)` বনাম `watch(provider)`। সংস্করণ 1.0.0 এর সাথে, শুধুমাত্র একটি সিনট্যাক্স অবশিষ্ট থাকে: `ref.watch(provider)`। অন্যদের সরিয়ে দেওয়া হয়েছে।

তাইঃ

- `HookConsumerWidget` এর পক্ষে `useProvider` সরানো হয়েছে।.
  আগেঃ

  ```dart
  class Example extends HookWidget {
    @override
    Widget build(BuildContext context) {
      useState(...);
      int count = useProvider(counterProvider);
      ...
    }
  }
  ```

  পরেঃ

  ```dart
  class Example extends HookConsumerWidget {
    @override
    Widget build(BuildContext context, WidgetRef ref) {
      useState(...);
      int count = ref.watch(counterProvider);
      ...
    }
  }
  ```

- `ConsumerWidget` এর `build` এবং `Consumer` এর `builder` এর প্রোটোটাইপ পরিবর্তিত হয়েছে।

  আগেঃ

  ```dart
  class Example extends ConsumerWidget {
    @override
    Widget build(BuildContext context, ScopedReader watch) {
      int count = watch(counterProvider);
      ...
    }
  }

  Consumer(
    builder: (context, watch, child) {
      int count = watch(counterProvider);
      ...
    }
  )
  ```

  পরেঃ

  ```dart
  class Example extends ConsumerWidget {
    @override
    Widget build(BuildContext context, WidgetRef ref) {
      int count = ref.watch(counterProvider);
      ...
    }
  }

  Consumer(
    builder: (context, ref, child) {
      int count = ref.watch(counterProvider);
      ...
    }
  )
  ```

- `context.read` কে `ref.read` এর পক্ষে সরানো হয়েছে`.
  আগেঃ

  ```dart
  class Example extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
      SomeButton(
        onPressed: () => context.read(provider.notifier).doSomething(),
      );
    }
  }
  ```

  পরেঃ

  ```dart
  class Example extends ConsumerWidget {
    @override
    Widget build(BuildContext context, WidgetRef ref) {
      SomeButton(
        onPressed: () => ref.read(provider.notifier).doSomething(),
      );
    }
  }
  ```

### StateProvider আপডেট

[StateProvider]কে [StateNotifierProvider] এর সাথে মেলে আপডেট করা হয়েছে।

আগে, `ref.watch(StateProvider)` করা একটি `StateController` ইন্সট্যান্স রিটার্ন করত। এখন এটি শুধুমাত্র `StateController` এর স্ট্যাট রিটার্ন করে।

মাইগ্রেট করার জন্য আপনার কাছে কয়েকটি সমাধান আছে।
যদি আপনার কোডটি সংশোধন না করেই কেবলমাত্র স্টেটটি পেয়ে থাকে, তাহলে আপনি এখান থেকে পরিবর্তন করতে পারেনঃ

```dart
final provider = StateProvider<int>(...);

Consumer(
  builder: (context, ref, child) {
    StateController<int> count = ref.watch(provider);

    return Text('${count.state}');
  }
)
```

এখানেঃ

```dart
final provider = StateProvider<int>(...);

Consumer(
  builder: (context, ref, child) {
    int count = ref.watch(provider);

    return Text('${count}');
  }
)
```

বিকল্পভাবে আপনি পুরানো আচরণ রাখতে নতুন `StateProvider.state` ব্যবহার করতে পারেন।

```dart
final provider = StateProvider<int>(...);

Consumer(
  builder: (context, ref, child) {
    StateController<int> count = ref.watch(provider.state);

    return Text('${count.state}');
  }
)
```

[statenotifierprovider]: https://pub.dev/documentation/hooks_riverpod/latest/legacy/StateNotifierProvider-class.html
[stateprovider]: https://pub.dev/documentation/hooks_riverpod/latest/legacy/StateProvider-class.html
[statenotifier]: https://pub.dev/documentation/state_notifier/latest/state_notifier/StateNotifier-class.html
